package com.hsurosy.hsuchain.nft.admin.vo;

import cn.dev33.satoken.stp.StpUtil;
import com.hsurosy.hsuchain.nft.api.user.response.data.UserInfo;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * 管理员登录视图对象
 *
 * @Author Hsu琛君珩
 * @Date 2024-10-05 19:16
 * @Description
 * @Version: v1.0.0
 */
@Data
@NoArgsConstructor
public class AdminLoginVO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 用户标识，例如用户ID
     */
    private String userId;

    /**
     * 访问令牌
     */
    private String token;

    /**
     * 令牌过期时间（单位：秒）
     */
    private Long tokenExpiration;

    /**
     * 根据用户信息生成管理员登录视图对象
     *
     * 通过 {@link UserInfo} 对象提取用户ID，同时通过 Sa-Token 工具类 {@link StpUtil} 获取登录后的令牌和令牌的过期时间。
     *
     * @param userInfo 用户信息对象
     */
    public AdminLoginVO(UserInfo userInfo) {
        this.userId = userInfo.getUserId().toString();   // 从 UserInfo 中获取用户ID
        this.token = StpUtil.getTokenValue();           // 使用 Sa-Token 获取当前登录的 token
        this.tokenExpiration = StpUtil.getTokenSessionTimeout(); // 获取当前 token 的过期时间
    }
}
